Search
Close this search box.
Group 928Created with Sketch.
Group 67Created with Sketch.
Group 125Created with Sketch.
Group 126Created with Sketch.

Lightning Talk 172 – Kotlin in der Praxis

In unseren Lightning Talks teilen unsere Software Engineers ihre Erfahrungen mit bestimmten Technologien und geben Impulse für die Projektarbeit. Die Programmiersprache Kotlin ist dabei nicht nur wegen der Java-Kompatibilität interessant. Unser Kollege Martin Käser berichtet von seinen Erfahrungen aus einem Projekt, das mit Kotlin umgesetzt wurde. Hiermit übergeben wir das Wort an Martin:

Bei dem Projekt handelt es sich um eine zentrale Datenverwaltungskomponente in Rahmen des Catena-X Automotive Networks, das eine OpenAPI-Schnittstelle für die Abfrage und den Upload komplexer Geschäftspartnerdatensätze anbietet und diese weiterverarbeitet. Die Anwendung setzt auf dem Framework Spring Boot auf, welches eine sehr gute Unterstützung für Kotlin bietet.

Die wichtigsten Kotlin-Features

Java-Kompatibilität

Kotlin ist kompatibel zu Java, kann also zusammen mit Java-Libraries und sogar mit Java-Code im gleichen Projekt eingesetzt werden. Für uns hat der Einsatz wichtiger Libraries wie z.B. Hibernate, OpenAPI und Jackson problemlos funktioniert.

Kompakte Syntax

Kotlin ermöglicht es im Vergleich zu Java auf einen Großteil des Boilerplate-Codes zu verzichten, wodurch der Code im Idealfall lesbarer wird. Wir haben Data Classes eingesetzt, um das umfangreiche Datenmodell kompakt zu definieren. Auf der anderen Seite besteht aber eine gewisse Gefahr, dass bei übertriebenem Einsatz der mächtigen Sprachmittel der Code schwer zu verstehen ist. Nach Spider-Man: “With great power comes great responsibility”! Mit Kotlin sind wechselseitige Code-Reviews daher besonders wichtig, um im Team zu einem gemeinsamen Verständnis zu kommen.

Starkes Typsystem

Kotlin hat ein starkes Typsystem, am bekanntesten dürfte die verbesserte Null-Sicherheit sein. Für jeden Datentyp gibt es eine Variante, die immer einen Wert haben muss (z.B. Int, String, MyClass) und eine Variante, die null zulässt (z.B. Int?, String?, MyClass?). Fehler werden so oft schon vom Compiler und nicht erst zur Laufzeit erkannt. Für uns war dies sehr hilfreich, als das Datenmodell angepasst werden musste und z.B. einige Pflichtfelder hinzugekommen sind, aber auch einige auf optional geändert wurden. Diese Änderungen hatten dann zwar große Auswirkungen auf das ganze Projekt. Der Compiler konnte aber die meisten potenziellen Probleme frühzeitig erkennen und sicherstellen, dass keine notwendigen Änderungen vergessen wurden, etwa auch an den Unit-Tests.

Verbesserte Collection-API

Kotlin hat eine deutlich verbesserte Collection-API verglichen mit Java. Alle wichtigen Datenstrukturen (List, Set, Map) gibt es standardmäßig in der unveränderlichen (immutable) Variante und zusätzlich in einer modifizierbaren Variante. Gerade beim Einsatz funktionaler Techniken sind immutable Datenstrukturen vorteilhaft, da sie weniger fehleranfällig und besser zu optimieren sind. Außerdem bieten alle verwandten Datenstrukturen eine einheitliche und sehr mächtige API. Beispielsweise ist es mit Kotlin sehr einfach möglich, eine Liste nach einem bestimmten Schlüssel zu gruppieren, also in eine Map einzusortieren. Dies haben wir sehr häufig genutzt, wenn unsere Daten aufbereitet werden. Technisch hat Kotlin dies über Extension Methods umgesetzt, womit eine Klasse oder ein Interface modular um neue Funktionalität erweitert werden kann, ohne in Internas eingreifen zu müssen.

Ich habe aus dem Projekt einen sehr positiven Eindruck von Kotlin gewonnen. Meiner Ansicht nach löst dies viele der Schwächen und Altlasten von Java auf elegante Weise. Mir persönlich macht die Entwicklung damit noch mehr Spaß!
Alle technischen Einzelheiten gibt’s im Video: